import type { RouteRecordRaw } from 'vue-router'

/**
 * 建议：路由 path 路径与文件夹名称相同，找文件可浏览器地址找，方便定位文件位置
 *
 * 路由meta对象参数说明
 * meta: {
 *      title:          菜单栏及 tagsView 栏、菜单搜索名称（国际化）
 *      isLink：        是否超链接菜单，开启外链条件，`1、isLink: 链接地址不为空 2、isIframe:false`
 *      isHide：        是否隐藏此路由
 *      isKeepAlive：   是否缓存组件状态
 *      isAffix：       是否固定在 tagsView 栏上
 *      isIframe：      是否内嵌窗口，开启条件，`1、isIframe:true 2、isLink：链接地址不为空`
 *      roles：         当前路由权限标识，取角色管理。控制路由显示、隐藏。超级管理员：admin 普通角色：common
 *      icon：          菜单、tagsView 图标，阿里：加 `iconfont xxx`，fontawesome：加 `fa xxx`
 * }
 */

// 扩展 RouteMeta 接口
declare module 'vue-router' {
  interface RouteMeta {
    title?: string
    isLink?: string
    isHide?: boolean
    isKeepAlive?: boolean
    isAffix?: boolean
    isIframe?: boolean
    roles?: string[]
    icon?: string
  }
}

/**
 * 定义动态路由
 * 前端添加路由，请在顶级节点的 `children 数组` 里添加
 * @description 未开启 isRequestRoutes 为 true 时使用（前端控制路由），开启时第一个顶级 children 的路由将被替换成接口请求回来的路由数据
 * @description 各字段请查看 `@/views/system/menu/component/addMenu.vue 下的 ruleForm`
 * @returns 返回路由菜单数据
 */
export const dynamicRoutes: Array<RouteRecordRaw> = [
  {
    path: '/',
    name: '/',
    component: () => import('@/layout/index.vue'),
    redirect: '/home',
    meta: {
      isKeepAlive: true
    },
    children: [
      {
        path: '/home',
        name: 'home',
        component: () => import('@/views/home/HomeIndex.vue'),
        meta: {
          title: 'message.router.home',
          isLink: '',
          isHide: false,
          isKeepAlive: true,
          isAffix: true,
          isIframe: false,
          roles: ['admin', 'common'],
          icon: 'iconfont icon-shouye'
        }
      },
      {
        path: '/system',
        name: 'system',
        component: () => import('@/layout/routerView/LayoutParent.vue'),
        redirect: '/system/menu',
        meta: {
          title: 'message.router.system',
          isLink: '',
          isHide: false,
          isKeepAlive: true,
          isAffix: false,
          isIframe: false,
          roles: ['admin'],
          icon: 'iconfont icon-xitongshezhi'
        },
        children: [
          {
            path: '/system/menu',
            name: 'systemMenu',
            component: () => import('@/views/system/menu/MenuIndex.vue'),
            meta: {
              title: 'message.router.systemMenu',
              isLink: '',
              isHide: false,
              isKeepAlive: true,
              isAffix: false,
              isIframe: false,
              roles: ['admin'],
              icon: 'iconfont icon-caidan'
            }
          },
          {
            path: '/system/role',
            name: 'systemRole',
            component: () => import('@/views/system/role/RoleIndex.vue'),
            meta: {
              title: 'message.router.systemRole',
              isLink: '',
              isHide: false,
              isKeepAlive: true,
              isAffix: false,
              isIframe: false,
              roles: ['admin'],
              icon: 'ele-ColdDrink'
            }
          },
          {
            path: '/system/user',
            name: 'systemUser',
            component: () => import('@/views/system/user/UserIndex.vue'),
            meta: {
              title: 'message.router.systemUser',
              isLink: '',
              isHide: false,
              isKeepAlive: true,
              isAffix: false,
              isIframe: false,
              roles: ['admin'],
              icon: 'iconfont icon-icon-'
            }
          },
          {
            path: '/system/dept',
            name: 'systemDept',
            component: () => import('@/views/system/dept/DeptIndex.vue'),
            meta: {
              title: 'message.router.systemDept',
              isLink: '',
              isHide: false,
              isKeepAlive: true,
              isAffix: false,
              isIframe: false,
              roles: ['admin'],
              icon: 'ele-OfficeBuilding'
            }
          },
          {
            path: '/system/dic',
            name: 'systemDic',
            component: () => import('@/views/system/dic/DicIndex.vue'),
            meta: {
              title: 'message.router.systemDic',
              isLink: '',
              isHide: false,
              isKeepAlive: true,
              isAffix: false,
              isIframe: false,
              roles: ['admin'],
              icon: 'ele-SetUp'
            }
          }
        ]
      },
      {
        path: '/personal',
        name: 'personal',
        component: () => import('@/views/personal/PersonalIndex.vue'),
        meta: {
          title: 'message.router.personal',
          isLink: '',
          isHide: false,
          isKeepAlive: true,
          isAffix: false,
          isIframe: false,
          roles: ['admin', 'common'],
          icon: 'iconfont icon-gerenzhongxin'
        }
      },
      {
        path: '/tools',
        name: 'tools',
        component: () => import('@/views/tools/ToolsIndex.vue'),
        meta: {
          title: 'message.router.tools',
          isLink: '',
          isHide: false,
          isKeepAlive: true,
          isAffix: false,
          isIframe: false,
          roles: ['admin', 'common'],
          icon: 'iconfont icon-gongju'
        }
      },
      {
        path: '/link',
        name: 'layoutLinkView',
        component: () => import('@/layout/routerView/link.vue'),
        meta: {
          title: 'message.router.layoutLinkView',
          isLink: 'https://element-plus.gitee.io/#/zh-CN/component/installation',
          isHide: false,
          isKeepAlive: false,
          isAffix: false,
          isIframe: false,
          roles: ['admin'],
          icon: 'iconfont icon-caozuo-wailian'
        }
      },
      {
        path: '/imgdrag',
        name: 'ImgDrag',
        component: () => import('@/views/demo/ImgDrag.vue'),
        meta: {
          title: 'message.router.personal',
          isLink: '',
          isHide: false,
          isKeepAlive: true,
          isAffix: false,
          isIframe: false,
          roles: ['admin', 'common'],
          icon: 'iconfont icon-gongju'
        }
      }
      // {
      // 	path: '/iframesOne',
      // 	name: 'layoutIframeViewOne',
      // 	component: () => import('@/layout/routerView/iframes.vue'),
      // 	meta: {
      // 		title: 'message.router.layoutIframeViewOne',
      // 		isLink: 'https://nodejs.org/zh-cn/',
      // 		isHide: false,
      // 		isKeepAlive: true,
      // 		isAffix: true,
      // 		isIframe: true,
      // 		roles: ['admin'],
      // 		icon: 'iconfont icon-neiqianshujuchucun',
      // 	},
      // },
    ]
  }
]

/**
 * 定义404、403界面
 * @link 参考：https://next.router.vuejs.org/zh/guide/essentials/history-mode.html#netlify
 */
export const notFoundAndNoPower = [
  {
    path: '/:path(.*)*',
    name: 'notFound',
    component: () => import('@/views/error/ErrorNotFound.vue'),
    meta: {
      title: 'message.staticRoutes.notFound',
      isHide: true
    }
  },
  {
    path: '/403',
    name: 'noPower',
    component: () => import('@/views/error/ErrorNotPower.vue'),
    meta: {
      title: 'message.staticRoutes.noPower',
      isHide: true
    }
  }
]

/**
 * 定义静态路由（默认路由）
 * 此路由不要动，前端添加路由的话，请在 `dynamicRoutes 数组` 中添加
 * @description 前端控制直接改 dynamicRoutes 中的路由，后端控制不需要修改，请求接口路由数据时，会覆盖 dynamicRoutes 第一个顶级 children 的内容（全屏，不包含 layout 中的路由出口）
 * @returns 返回路由菜单数据
 */
export const staticRoutes: Array<RouteRecordRaw> = [
  {
    path: '/login',
    name: 'login',
    component: () => import('@/views/login/LoginIndex.vue'),
    meta: {
      title: '登录'
    }
  }
]
